package com.waiting.thread;

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

/**
 * @Description
 * @Author bjweitingting
 * @Date 2018/11/14
 **/
public class Main {

    public static void main(String[] args) {
        try {
            Thread.sleep(10000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("休眠结束");
        //使用Lambda表达式创建Callable对象
        //使用FutureTask类来包装Callable对象
        FutureTask<Integer> future = new FutureTask<Integer>(
                (Callable<Integer>) () -> {
                    return 5;
                });
        //创建一个子线程，执行任务
        //实质上还是以Callable对象来创建并启动线程
        new Thread(future, "有返回值的线程").start();

        try {
            //拿到子线程的执行结果
            //get()方法会阻塞，直到子线程执行结束才返回
            System.out.println("子线程的返回值：" + future.get());
        } catch (Exception e) {
            e.printStackTrace();
        }
        while(Thread.activeCount()>0) {
            Thread.yield();
        }
    }


}
